#!/usr/bin/env python
# -*- coding: utf-8 -*-

import os
import subprocess
import datetime
import argparse


def create_directory(path):
    """创建目录，如果目录已存在则跳过"""
    if not os.path.exists(path):
        os.makedirs(path)
        print(f"已创建: {path}")
    else:
        print(f"已存在: {path}")


def initialize_git(root_dir):
    """初始化Git仓库"""
    try:
        subprocess.run(["git", "init"], cwd=root_dir, check=True)
        print("Git仓库初始化成功")
        return True
    except (subprocess.SubprocessError, FileNotFoundError):
        print("Git仓库初始化失败，请确保已安装Git")
        return False


def create_readme(root_dir, project_name):
    """创建README.md文件"""
    readme_path = os.path.join(root_dir, "README.md")
    current_date = datetime.datetime.now().strftime("%Y-%m-%d")
    
    with open(readme_path, "w", encoding="utf-8") as f:
        f.write(f"# {project_name}\n\n")
        f.write("## 版本信息记录\n\n")
        f.write(f"- 初始版本创建日期: {current_date}\n")
        f.write("- 版本: 0.1.0\n\n")
        f.write("## 项目说明\n\n")
        f.write("请在此处添加项目说明...\n\n")
        
        # 添加使用方法部分
        f.write("## 使用方法\n\n")
        f.write("### 创建项目结构\n")
        f.write("项目结构由`create_project_structure.py`脚本自动生成，运行以下命令：\n\n")
        f.write("```\n")
        f.write("# 默认在当前目录创建项目结构\n")
        f.write("python create_project_structure.py\n\n")
        f.write("# 指定项目名称和路径\n")
        f.write("python create_project_structure.py --name \"项目名称\" --path \"目标路径\"\n")
        f.write("```\n\n")
        
        f.write("### 项目结构说明\n\n")
        f.write("- `00_Project_management`: 全局管理\n")
        f.write("  - `00_需求分析&导入_QFD`: 需求分析与导入\n")
        f.write("  - `01_需求约束_Pugh`: 需求约束分析\n")
        f.write("  - `02_需求转化_Basic_Statics`: 需求转化与基础统计\n")
        f.write("  - `03_功能图谱_Function_Map`: 功能图谱\n")
        f.write("  - `04_法规认证_国内_国外`: 法规认证资料\n")
        f.write("  - `05_功能风险管控_DFMEA`: 功能风险管控\n")
        f.write("  - `06_知识产权_国内_国外`: 知识产权资料\n")
        f.write("  - `07_敏捷开发_Scrum`: 敏捷开发管理\n")
        f.write("  - `08_持续集成与测试_DevOps`: 持续集成与测试\n")
        f.write("  - `09_产品生产管理_Six_Sigma`: 产品生产管理\n")
        f.write("  - `10_缺陷管理追踪_Jira`: 缺陷管理与追踪\n")
        f.write("- `00_Reference`: 参考资料\n")
        f.write("  - `00_Docs`: 文档资料\n")
        f.write("- `01_Function_Map`: 开发节点与产品功能\n")
        f.write("- `02_Hardware`: 硬件开发\n")
        f.write("  - `00_Ref/00_HDK`: 硬件开发套件参考\n")
        f.write("  - `01_Project/01_AD`: AD项目文件\n")
        f.write("- `03_Firemware`: 固件开发\n")
        f.write("- `04_Software`: 软件开发\n")
        f.write("- `05_Mechanical`: 机械设计\n")
        f.write("  - `公模`: 公共模具\n")
        f.write("  - `私模`: 定制模具\n")
        f.write("- `06_FCT`: 上位机\n")
        f.write("- `07_Tools`: 工具资源\n\n")
        
        f.write("### 版本控制\n\n")
        f.write("项目使用Git进行版本控制，初始化已完成。使用标准Git命令进行版本管理：\n\n")
        f.write("```\n")
        f.write("git add .                # 添加修改\n")
        f.write("git commit -m \"消息\"     # 提交修改\n")
        f.write("git push                 # 推送到远程仓库（如需要）\n")
        f.write("```\n")
    
    print(f"README.md 文件已创建: {readme_path}")


def create_project_structure(root_dir, project_name):
    """创建项目结构"""
    # 创建根目录
    create_directory(root_dir)
    
    # 定义项目结构
    structure = {
        "00_Project_management": {
            "00_需求分析&导入_QFD": {},
            "01_需求约束_Pugh": {},
            "02_需求转化_Basic_Statics": {},
            "03_功能图谱_Function_Map": {},
            "04_法规认证_国内_国外": {},
            "05_功能风险管控_DFMEA": {},
            "06_知识产权_国内_国外": {},
            "07_敏捷开发_Scrum": {},
            "08_持续集成与测试_DevOps": {},
            "09_产品生产管理_Six_Sigma": {},
            "10_缺陷管理追踪_Jira": {}
        },
        "00_Reference": {
            "00_Docs": {}
        },
        "01_Function_Map": {},
        "02_Hardware": {
            "00_Ref": {
                "00_HDK": {}
            },
            "01_Project": {
                "01_AD": {
                    "01_Project_File": {},
                    "02_SCH": {},
                    "03_PCB": {}
                }
            }
        },
        "03_Firemware": {
            "WM": {}
        },
        "04_Software": {},
        "05_Mechanical": {
            "公模": {},
            "私模": {}
        },
        "06_FCT": {},
        "07_Tools": {}
    }
    
    # 递归创建目录结构
    def create_structure(base_path, structure_dict):
        for dir_name, sub_dirs in structure_dict.items():
            dir_path = os.path.join(base_path, dir_name)
            create_directory(dir_path)
            create_structure(dir_path, sub_dirs)
    
    create_structure(root_dir, structure)
    
    # 创建README.md
    create_readme(root_dir, project_name)
    
    # 初始化Git仓库
    git_initialized = initialize_git(root_dir)
    
    if git_initialized:
        # 添加所有文件到Git并提交
        try:
            subprocess.run(["git", "add", "."], cwd=root_dir, check=True)
            subprocess.run(["git", "commit", "-m", "初始项目结构"], cwd=root_dir, check=True)
            print("已提交初始项目结构到Git")
        except subprocess.SubprocessError:
            print("Git提交失败")


def main():
    """主函数"""
    parser = argparse.ArgumentParser(description="创建项目文件夹结构并初始化版本控制")
    parser.add_argument("--path", default=".", help="项目根目录路径，默认为当前目录")
    parser.add_argument("--name", default="项目名称", help="项目名称")
    
    args = parser.parse_args()
    
    print(f"正在创建项目: {args.name}")
    print(f"项目路径: {os.path.abspath(args.path)}")
    
    create_project_structure(args.path, args.name)
    
    print("\n项目创建完成!")


if __name__ == "__main__":
    main() 